package com.hr.reactive.mono.s02;

import com.hr.reactive.common.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono;

import java.util.concurrent.CompletableFuture;

/**
 * @author Administrator
 * 延迟执行
 */
public class Lec08FromFuture {
    private static final Logger log = LoggerFactory.getLogger(Lec08FromFuture.class);

    public static void main(String[] args) throws InterruptedException {
       // Mono.fromFuture(getName()); 不能延迟执行
        //Mono.fromFuture(Lec08FromFuture::getName) 可以延迟执行 把他变成Supplier类型
        Mono.fromFuture(Lec08FromFuture::getName)
               .subscribe(Utils.subscriber());
       // Utils.sleepSeconds(1000);
    }
    //CompletableFuture不是惰性的 会立即执行 在响应式编程中 所有的都应该是惰性的
    private static CompletableFuture<String >getName(){
        System.out.println(Thread.currentThread().getName());
        return CompletableFuture.supplyAsync(()->{
            System.out.println(Thread.currentThread().getName());
            return Utils.faker().name().firstName();
        });
    }
}


